/**********************************************************************
 *** *                                                            * ***
 *** *  Copyright (c) 2011 Harmonia Holdings Group LLC            * ***
 *** *                                                            * ***
 *** * Permission is hereby granted to use, modify, copy, and     * ***
 *** * distribute this software and its documentation for any     * ***
 *** * purpose only without profit, provided that the above       * ***
 *** * Copyright Notice appears in all copies and that both the   * ***
 *** * Copyright Notice and this Permission Notice appears in     * ***
 *** * every copy of supporting documentation.  No title to nor   * ***
 *** * ownership of the software is transferred hereby.  The name * ***
 *** * of Harmonia Holdings Group LLC shall not be used in        * ***
 *** * advertising or publicity related to the distribution of    * ***
 *** * the software without specific, written, prior permission.  * ***
 *** * This software is provided as-delivered without expressed   * ***
 *** * or implied warranty.  Harmonia Holdings Group LLC          * ***
 *** * makes no representation about the suitability of this      * ***
 *** * software for any purpose and accepts no responsibility for * ***
 *** * its use.                                                   * ***
 *** *                                                            * ***
 *** ************************************************************** ***
 *** *                                                            * ***
 *** * This program is free software; you can redistribute it     * ***
 *** * and/or modify it under the terms of the GNU General Public * ***
 *** * License as published by the Free Software Foundation;      * ***
 *** * either version 2 of the License, or (at your option) any   * ***
 *** * later version.                                             * ***
 *** *                                                            * ***
 *** * This program is distributed in the hope that it will be    * ***
 *** * useful, but WITHOUT ANY WARRANTY; without even the implied * ***
 *** * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR    * ***
 *** * PURPOSE.  See the GNU General Public License for more      * ***
 *** * details.                                                   * ***
 *** *                                                            * ***
 *** * You should have received a copy of the GNU General Public  * ***
 *** * License along with this program; if not, write to the Free * ***
 *** * Software Foundation, Inc., 51 Franklin Street, Fifth       * ***
 *** * Floor, Boston, MA 02110-1301, USA.                         * ***
 *** *                                                            * ***
 *** * For more information: http://www.gnu.org/licenses/gpl.html * ***
 *** *                                                            * ***
 **********************************************************************/
package org.etexascode.transceiver.transmit;

import java.util.logging.Level;
import org.etexascode.j2735.SPAT;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.logging.Logger;
import javax.ws.rs.core.MediaType;
import org.etexascode.transceiver.TransceiverConstants;
import org.etexascode.transceiver.receive.SPATReceiver;


public class SPATTransmitter {

    
    private static final Logger logger = Logger.getLogger(SPATTransmitter.class.getName());
    
    Client restClient = null;
    
    WebResource resource = null;
    
    ExecutorService threadPool = null;

    
    public SPATTransmitter() {
    }

    
    public SPATTransmitter(String endpointURI) {
        restClient = Client.create();
        resource = restClient.resource(endpointURI + TransceiverConstants.SPAT_RESOURCE_PATH);
        threadPool = Executors.newFixedThreadPool(100);
    }

    
    public Future<Void> broadcast(final SPAT data) {
        
        SPATReceiver.getInstance().receiveSPAT(data);

        if (resource != null) {
            
            Future<Void> future = threadPool.submit(new Runnable() {

                @Override
                public void run() {
                    
                    String retVal = resource.type(MediaType.APPLICATION_XML_TYPE).put(String.class, data);

                    
                    logger.log(Level.FINE, "SPAT message transmitted. Return value is: {0}", retVal);
                }
            }, (Void) null);

            return future;
        }

        return null;
    }
}
